
import Estructuras.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.LinkedList;



/**
 *
 * @author Luis E Sosa S
 */
public class main {

  //Scheduler
  private static Scheduler sc;

  //CPU
  private static Cpu_struct CPU;

  //DISPOSITIVO OI
  private static IO_struct IO;

  //Sistema Operativo
  private static SO so;

  private static InitialProcessList init;
  

 public static void crearTimer(){
//Instanciar el timer
      TimerH th = new TimerH();
      int tiempoEjecucion = Configuracion.tiempoEjecucion;
      //objeto que usara timer
       //CPU U SHCHEDULER


      //se agrega el objeto observador al objeto observado



      th.addObserver(CPU); //CPU
      //th.addObserver(sc); //scheduler
      th.addObserver(so);
      th.addObserver(IO); //IO
      th.addObserver(init); // Proceso inicial
      //inicia hilo de timer
      Thread hiloTimer = new Thread(th);
      hiloTimer.start();
    try {
      
      Thread.sleep(tiempoEjecucion);
    } catch (InterruptedException ex) {
      Logger.getLogger(main2.class.getName()).log(Level.SEVERE, null, ex);
    }
      //detiene el hilo
      th.detener();

    }




    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //Se crean unos procesos
        sched_entity se = new sched_entity(5, 4, 3, 2);
        Task_struct ts1 = new Task_struct();
        process_xml lectura = new process_xml("/home/cesrafa/Dropbox/sis_operativo02/scripts/process_request_file.xml");
        LinkedList<Task_struct> lista_init = new LinkedList<Task_struct>();
        lista_init = lectura.lecturaXML();
        /*
        ts1.setPid(101);
        ts1.setPrio((short)40);


        Task_struct ts2 = new Task_struct();

        ts2.setPid(102);
        ts2.setPrio((short)50);

        Task_struct ts3 = new Task_struct();
        ts3.setPid(103);
        ts3.setPrio((short)70);

        Task_struct ts4 = new Task_struct();
        ts4.setPid(104);
        ts4.setPrio((short)40);

        Task_struct ts5 = new Task_struct();
        ts5.setPid(105);
        ts5.setPrio((short)40);
        */

        
        

        
        //crea Scheduler
        sc = new Scheduler();

        //Sistema Operativo
        so = new SO(sc);

       
        
        //Se crea el CPU
        CPU = new Cpu_struct(sc);

        //Se crea unidad de IO
        IO = new IO_struct(sc);

        // Se crea el proceso inicial
        init = new InitialProcessList(lista_init,so.getTaskList());

         //Agregar proceso al SO
        /*
        so.crearProceso(ts1);
        so.crearProceso(ts2);
        so.crearProceso(ts3);
        so.crearProceso(ts4);
        so.crearProceso(ts5);
        */
        //Creamos un TIMER INICIA EJECUCION
        crearTimer();
    }

}
